home *** CD-ROM | disk | FTP | other *** search
- /*
- * Vdi output functions library interface
- *
- * v_pline polyline
- * v_pmarker draw markers
- * v_gtext draw text
- * v_fillarea filled area
- * v_cellarray draw array of rectangles
- * v_contourfill flood fill
- * vr_recfl fill rect
- *
- * ++jrb bammi@cadence.com
- * modified: mj -- ntomczak@vm.ucs.ualberta.ca
- */
- #include "common.h"
-
-
- #ifdef __DEF_ALL__
-
- #define L_v_pline
- #define L_v_pmarke
- #define L_v_gtext
- #define L_v_fillar
- #define L_v_cellar
- #define L_v_contou
- #define L_vr_recfl
-
- #endif /* __DEF_ALL__ */
-
-
- #ifdef L_v_pline
-
- /* v_pline polyline
- * returns void
- */
- void v_pline(int handle, int count, int pxyarray[])
- {
- #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
- _vdiparams[2] = (void *) &pxyarray[0];
- #else /* 32 bit ints - let's copy */
- register short i;
- register short *pts = &_ptsin[0];
- register int *pxy = &pxyarray[0];
-
- for(i = count; i != 0; i-- )
- {
- *pts++ = *pxy++;
- *pts++ = *pxy++;
- }
- #endif
-
- __vdi__(VDI_CONTRL_ENCODE(6, count, 0, 0), handle);
-
- #ifdef __MSHORT__
- _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
- #endif
- }
- #endif /* L_v_pline */
-
-
- #ifdef L_v_pmarke
-
- /* v_pmarker draw markers
- * returns void
- */
- void v_pmarker(int handle, int count, int pxyarray[])
- {
- #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
- _vdiparams[2] = (void *) &pxyarray[0];
- #else /* 32 bit ints - let's copy */
- register short i;
- register short *pts = &_ptsin[0];
- register int *pxy = &pxyarray[0];
-
- for(i = count; i != 0; i-- )
- {
- *pts++ = *pxy++;
- *pts++ = *pxy++;
- }
- #endif
-
- __vdi__(VDI_CONTRL_ENCODE(7, count, 0, 0), handle);
-
- #ifdef __MSHORT__
- _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
- #endif
- }
- #endif /* L_v_pmarke */
-
-
- #ifdef L_v_gtext
-
- /* v_gtext draw text (extra super slow -- don't ask me why)
- * returns void
- */
- v_gtext(int handle, int x, int y, char *str)
- {
- unsigned char ch;
- short *ptr = _intin;
-
- _ptsin[0] = x;
- _ptsin[1] = y;
- while ( ch = (unsigned char) *str++)
- *ptr++ = ch;
-
- __vdi__(VDI_CONTRL_ENCODE(8, 1, (int)(ptr - _intin), 0), handle);
- }
- #endif /* L_v_gtext */
-
-
- #ifdef L_v_fillar
-
- /* v_fillarea filled area
- * returns void
- */
- void v_fillarea(int handle, int count, int pxyarray[])
- {
- #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
- _vdiparams[2] = (void *) &pxyarray[0];
- #else /* 32 bit ints - let's copy */
- register short i;
- register short *pts = &_ptsin[0];
- register int *pxy = &pxyarray[0];
-
- for(i = count; i != 0; i-- )
- {
- *pts++ = *pxy++;
- *pts++ = *pxy++;
- }
- #endif
-
- __vdi__(VDI_CONTRL_ENCODE(9, count, 0, 0), handle);
-
- #ifdef __MSHORT__
- _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
- #endif
- }
- #endif /* L_v_fillar */
-
-
- #ifdef L_v_cellar
-
- /* v_cellarray draw array of rectangles
- * returns void
- */
- void v_cellarray(int handle, int pxyarray[], int row_length,
- int elements, int nrows, int write_mode, int colarray[])
- {
- short *wptr, *end;
-
- wptr = _ptsin;
- end = wptr + 4;
- do {
- *wptr++ = *pxyarray++;
- } while (wptr < end);
- wptr = (short *)&_contrl[7];
- *wptr++ = row_length;
- *wptr++ = elements;
- *wptr++ = nrows;
- *wptr = write_mode;
-
- wptr = _intin;
- end = wptr + (short)nrows * (short)elements;
- while (wptr < end)
- *wptr++ = *colarray++;
-
- __vdi__(VDI_CONTRL_ENCODE(10, 2, (int)(wptr - _intin), 0), handle);
- }
- #endif /* L_v_cellar */
-
-
- #ifdef L_v_contou
-
- /* v_contourfill flood fill from seed point to either dsp.edge or colr index
- * returns void
- */
- void v_contourfill(int handle, int x, int y, int index)
- {
- _ptsin[0] = x;
- _ptsin[1] = y;
- _intin[0] = index;
- __vdi__(VDI_CONTRL_ENCODE(103, 1, 1, 0), handle);
- }
- #endif /* L_v_contou */
-
-
- #ifdef L_vr_recfl
-
- /* vr_recfl fill rect
- * returns void
- */
- void vr_recfl(int handle, int pxyarray[])
- {
- #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
- _vdiparams[2] = (void *) &pxyarray[0];
- #else /* 32 bit ints - let's copy */
- short *wptr = _ptsin;
-
- *wptr++ = *pxyarray++;
- *wptr++ = *pxyarray++;
- *wptr++ = *pxyarray++;
- *wptr = *pxyarray;
- #endif
-
- __vdi__(VDI_CONTRL_ENCODE(114, 2, 0, 0), handle);
-
- #ifdef __MSHORT__
- _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
- #endif
- }
- #endif /* L_vr_recfl */
-
- /* -eof- */
-